﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Schema;

namespace 二维数组练习
{
    internal class Program
    {
        static void Main(string[] args)
        {
            #region 将1-10000赋值给100行100列的二维数组
            //int[,] a = new int[100, 100];
            //int Index = 1;
            //for(int i = 0; i < a.GetLength(0); i++)  //  (0)表示行
            //{
            //    for(int j = 0; j < a.GetLength(1); j++)    //（1）表示列
            //    {
            //        a[i, j] = Index;
            //        Index++;

            //        Console.Write(" ");
            //        Console.Write(a[i,j]);
            //    }
            //}
            #endregion
            #region 四行四列 1-101随机数 并且右上部分值改为0
            //int[,] a = new int[4, 4];
            //Random r = new Random();    
            //for(int i = 0; i < a.GetLength(0); i++)
            //{
            //    for(int j = 0; j < a.GetLength(1); j++)
            //    {
            //        if(i<=1 && j>1)
            //        {
            //            a[i, j] = 0;
            //            Console.Write(a[i, j] + " ");
            //        }
            //        else
            //        {
            //            a[i, j] = r.Next(1, 102);
            //            Console.Write(a[i, j] + " ");


            //        }
            //    }
            //    Console.WriteLine(" ");

            //}

            #endregion
            #region 打印三行三列对角线元素(1-10的随机数)的和
            //int[,] a = new int[3, 3];
            //Random r = new Random();    
            //int sum = 0 ;
            //for(int i = 0; i < a.GetLength(0); i++)

            //{
            //    for(int j = 0; j<a.GetLength(1); j++)
            //    {
            //        a[i, j] = r.Next(1, 11);
            //        if (i == j || i + j == 2)
            //        {

            //            sum += a[i, j];

            //        }

            //        Console.Write(a[i,j] + " ");
            //    }
            //    Console.WriteLine(" ");
            //}
            //Console.WriteLine("***********************");
            //Console.WriteLine("对角线元素的和为 {0}",sum);
            #endregion
            #region 求二维数组(5,5)中最大元素以及最大元素(1-500范围内)对应的坐标
            //int[,] a = new int[5, 5];
            //Random r = new Random();
            //int MaxI = 0;
            //int MaxJ = 0;
            //for(int i = 0; i < a.GetLength(0); i++)
            //{         
            //    for(int j = 0; j< a.GetLength(1);j++)
            //    {
            //        a[i, j] = r.Next(1, 501);
            //        if (a[MaxI,MaxJ] < a[i, j])
            //        {
            //            MaxI = i;
            //            MaxJ = j;
            //        }
            //        Console.Write(a[i, j] + " ");
            //    }
            //    Console.WriteLine(" ");
            //}
            //Console.WriteLine(a[MaxI,MaxJ]);
            //Console.WriteLine("最大值对应的坐标为{0}，{1}",MaxI,MaxJ);
            #endregion
            #region 将一个M*N的二维数组 随机打印0和1 并且将有1的行和列全部变为1  
            //int[,] a = new int[5, 5];
            //Random r = new Random();
            //bool[] hang = new bool[5];
            //bool[] lie = new bool[5];   

            ////采用标识的形式来完成
            //for (int i = 0; i < a.GetLength(0); i++)
            //{
            //    for (int j = 0; j < a.GetLength(1); j++)
            //    {
            //        a[i, j] = r.Next(0, 2);
            //        Console.Write(a[i, j] + " ");
            //        if (a[i,j] == 1)
            //        {
            //            hang[i] = true;
            //            lie[j] = true; 
            //        }

            //    }
            //    Console.WriteLine(" ");
            //}
            //Console.WriteLine("******************************");
            //for (int i = 0; i < a.GetLength(0); i++)
            //{
            //     for(int j = 0;j < a.GetLength(1); j++)
            //    {
            //        if (hang[i] && lie[j])
            //        {
            //            a[i, j] = 1;
            //        }
            //        Console.Write(a[i,j] + " ");
            //    }
            //    Console.WriteLine(" ");
            //}

            #endregion
            #region 设置一个二维5行5列的数组，随机打印0和1，并将有0的行和列全部打印为1
            int[,] a =new int[5, 5];
            bool[] hang = new bool[5];  
            bool[] lie = new bool[5];
            Random r = new Random();
            for(int i = 0;  i < a.GetLength(0); i++)
            {
                for(int j = 0;j<a.GetLength(1);j++)
                {
                    a[i, j] = r.Next(0, 2);
                    if (a[i,j] == 1)
                    {
                        hang[i] = true;
                        lie[j] = true;
                    }
                    Console.Write(a[i,j]+" ");
                }
                Console.WriteLine("");
            }
            Console.WriteLine("*********************");
            for (int i = 0;i < a.GetLength(0);i++)
            {
                for(int j = 0;j<a.GetLength(1); j++)
                {
                    if (hang[i] && lie[j])
                    {
                        a[i,j] = 1;
                    }
                    Console.Write(a[i,j] + " ");
                }
                Console.WriteLine(" ");
            }
            #endregion 
        }
    }
}
